#ifndef _AA_H
#define _AA_H
#include "atom.h"
/**

   Representation of an Amino acid.

   It seems as though a reasonable approximation to an amino acid is
   to treat it as a point in space with a type and a direction.  This
   structure provides [xyz]_pos to store the position in space (a mass
   center, or a alpha carbon, for example).  The [xyz]_dir fields
   store the position of the end of the direction vector.  This could
   be acutal location of a functional group, or some sort of side
   chain descriptor.  The coordinates of [xyz]_dir are in the same
   reference frame as the [xyz]_pos fields; they are not relative to
   that field.  

   @todo Change the definition of aa.[xyz]_dir so that they are stored
   in coordinates relative to [xyz]_pos, and change the size of these
   three values from int to short.  (We don't need all of the
   precision that we currently store.  Switching to shorts would limit
   the length of the direction vector to about 32 angstoms, which
   should be plenty.

   @todo Document aa.type  (And why is it a short instead of an unsigned char, or a char???)

   \ingroup AA

 */

struct aa {
  int x_pos;
  int y_pos;
  int z_pos;
  int x_dir;
  int y_dir;
  int z_dir;
  short type;
  short serial;
};


/**
   \ingroup AA
*/
void aa_print (const struct aa* aa);
/** 
   \ingroup AA
*/
void aa_init (struct aa* aa, const struct atom* alphaCarbon, const struct atom* orientationPoint);
#endif // _AA_H
